package com.eshop.tools.config;

import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.servlet.MultipartConfigElement;
import java.io.File;

/**
 * 配置类MultipartConfig，用于配置文件上传的相关参数，具体来说是配置MultipartConfigElement，这是Spring Boot中处理multipart/form-data类型请求（即文件上传请求）时所需的一个关键组件。
 *
 * proxyBeanMethods = false 表示这个配置类不会生成代理方法，可以避免无必要的代理对象创建，提高性能。
 *
 * MultipartConfigElement multipartConfigElement() 方法是一个@Bean注解的方法，意味着它会作为Spring容器中的一个Bean进行注册。
 *
 * 方法内部首先创建了一个MultipartConfigFactory对象，用于定制多部分请求的配置。接着获取用户的home目录，并拼接了一个临时文件存储路径.yshop/file/tmp，然后检查这个路径对应的目录是否存在，如果不存在则创建。
 *
 * 最后，将这个临时文件存储路径设置到MultipartConfigFactory对象中，然后通过调用factory.createMultipartConfig()方法生成一个MultipartConfigElement实例，并将其作为Bean返回给Spring容器。
 *
 * 这样，在Spring Boot应用启动后，所有支持文件上传的控制器方法都会使用这个配置好的临时目录来存放上传过程中产生的临时文件。
 */
@Configuration(proxyBeanMethods = false)
public class MultipartConfig
{
    @Bean
    MultipartConfigElement multipartConfigElement() {
        final MultipartConfigFactory factory = new MultipartConfigFactory();
        final String location = System.getProperty("user.home") + "/.yshop/file/tmp";
        final File tmpFile = new File(location);
        if (!tmpFile.exists()) {
            tmpFile.mkdirs();
        }
        factory.setLocation(location);
        return factory.createMultipartConfig();
    }
}
